#ifndef CICORE_FACE_H
#define CICORE_FACE_H

#include "Vector3D.h"
#include "Vertex.h"

namespace CICore {
    class Face {        
        /*    //TODO
        Ogni faccia della geometria invece di avere un int che rappresenta l'indice del materiale
        associato alla faccia nella libreria dei materiali, la faccia avr� un indice (o un riferimento) del gruppo
        associato alla faccia stessa nella libreria dei gruppi..ciascuno dei quali avr� invece, 
        l'indice (o un riferimento) del materiale (o texture) caratterizzante il gruppo nella libreria dei materiali (o texture)
        */

    public:        
        Face (const VertexLib& v);          //Constructor
        virtual ~Face();                    //Destructor

        const VertexLib vertices;           //A reference to the parent-geometry-vertices'container
        Vector3D normal;                    //The face's normal

        bool selected;                      //A boolean to indicates if the face is currently selected
        bool visible;                       //A boolean to indicates if the face is currently visible

        //Group& group;                     //The group to which the face belongs           //TODO

        //Utility Methods
        void ComputeNormal ();              //Method called to compute the face's normal
        void SetSelected ();                //Method called to set the face and its vertices as selected

    };            

    typedef std::vector<Face*> FaceLib;       //Faces Container
    typedef FaceLib::iterator FaceIter;       //Faces Iterator

}
#endif /* CICORE_FACE_H */
